package com.own.business.system.parameter.base.frame.business.method;

import com.own.business.system.parameter.adapter.base.BaseParameterModel;
import com.own.business.system.parameter.adapter.method.SystemParameterInfoMethod;
import com.own.business.system.parameter.base.frame.business.model.ParameterModel;
import com.own.business.system.parameter.base.frame.business.service.SystemParameterService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * SystemParameterInfoMethodImpl
 *
 * @author chenxueli
 * @date 2023-06-29 09:48:01
 */
@Slf4j
@Component
public class SystemParameterInfoMethodImpl implements SystemParameterInfoMethod {

    @Resource
    private SystemParameterService systemParameterService;

    @Resource
    private ApplicationContext applicationContext;

    /**
     * 获取环境信息
     *
     * @return 环境信息
     */
    private String getEnvironment() {
        return applicationContext.getEnvironment().getActiveProfiles()[0];
    }

    /**
     * 根据id获取参数信息
     *
     * @param id 主键id
     * @return 参数信息
     */
    @Override
    public BaseParameterModel getById(Long id) {
        var parameter = systemParameterService.getPoById(id);
        if (parameter == null) {
            return null;
        }
        return new ParameterModel(parameter);
    }

    /**
     * 根据code获取参数信息
     *
     * @param code 参数code
     * @return 参数信息
     */
    @Override
    public BaseParameterModel getByCode(String code) {
        var parameter = systemParameterService.getByCodeAndEnv(code, getEnvironment());
        if (parameter == null) {
            return null;
        }
        return new ParameterModel(parameter);
    }

    /**
     * 根据参数分组获取参数列表
     *
     * @param group 参数分组
     * @return 参数列表
     */
    @Override
    public List<? extends BaseParameterModel> listByGroup(String group) {
        var list = systemParameterService.listByGroupAndEnv(group, getEnvironment());
        return list.stream().map(ParameterModel::new).collect(Collectors.toList());
    }

}
